package com.mall4jcola.cloud.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author hmxchen
 */
public interface HttpEnum {
    @Getter
    @AllArgsConstructor
    enum Request {
        /**
         * ok
         */
        OK("R0000", "ok"),
        /**
         * 方法参数没有校验，内容由输入内容决定
         */
        METHOD_ARGUMENT_NOT_VALID("R0001", ""),
        /**
         * 无法读取获取请求参数
         */
        HTTP_MESSAGE_NOT_READABLE("R0002", "请求参数格式有误"),
        /**
         * 数据不完整
         */
        DATA_INCOMPLETE("R0003", "数据不完整"),
        /**
         * 数据异常
         */
        DATA_ERROR("R0004", "数据异常，请刷新后重新操作"),
        /**
         * 服务器出了点小差
         */
        EXCEPTION("R0005", "服务器出了点小差"),
        ;
        private String code;
        private String msg;
    }

    @Getter
    @AllArgsConstructor
    enum ShopCartBiz {
        /**
         * SCB开头代表购物车
         */
        SHOP_CART_NOT_EXIST("SCB0001", "shop cart not exist"),
        ;
        private String code;
        private String msg;
    }

    @Getter
    @AllArgsConstructor
    enum GoodsBiz {

        /**
         * GB开头代表商品
         */
        SPU_NOT_EXIST("GB0001", "spu not exist"),
        ;
        private String code;
        private String msg;
    }

    @Getter
    @AllArgsConstructor
    enum PurchaseOrderBiz {
        /**
         * POB开头代表订单
         */
        ORDER_NOT_EXIST("POB0001", "order not exist"),

        /**
         * 请勿重复提交订单，
         * 1.当前端遇到该异常时，说明前端防多次点击没做好
         * 2.提示用户 订单已发生改变，请勿重复下单
         */
        REPEAT_ORDER("POB0002", "please don't repeat order"),

        /**
         * 订单已过期，当前端看到该状态码的时候，提示订单信息已过期，请重新确认后提交，此时用户点击确定，前端刷新页面。
         */
        ORDER_EXPIRED("POB0003", "order expired"),

        /**
         * 订单已支付，无法取消订单
         */
        ORDER_PAYED("POB0004", "order payed"),

        /**
         * 订单未发货，无法确认收货
         */
        ORDER_NO_DELIVERY("POB0005", "order no delivery"),

        /**
         * 库存不足，body会具体返回那个skuid的库存不足
         */
        NOT_STOCK("POB0006", "not stock"),

        /**
         * 订单未完成或未关闭，无法删除订单
         */
        ORDER_NOT_FINISH_OR_CLOSE("POB0007", "order not finish or close"),

        /**
         * 订单未支付
         */
        ORDER_NOT_PAYED("POB0008", "order not payed"),

        /**
         * 订单已失败
         */
        ORDER_HAS_FAILED("POB0009", "order has failed"),
        /**
         * 没有查询权限
         */
        REFUND_NOT_PERMISSION("POB0010", "没有查询权限"),

        /**
         * 撤销失败 当前状态不允许此操作
         */
        REFUND_STATUS_CHECK("POB0011", "refund status check"),

        ;
        private String code;
        private String msg;

    }

    @Getter
    @AllArgsConstructor
    enum LoginRegisterBiz {

        /**
         * 04 开头代表注册登录之类的异常状态
         * 社交账号未绑定，当前端看到该异常时，应该在合适的时间（比如在购买的时候跳）根据社交账号的类型，跳转到绑定系统账号的页面
         */
        SOCIAL_ACCOUNT_NOT_BIND("LRB0001", "social account not bind"),
        /**
         * 有些时候第三方系统授权之后，会有个临时的key，比如小程序的session_key
         * 这个异常代表session_key过期，前端遇到这个问题的时候，应该再次调用社交登录的接口，刷新session_key
         */
        BIZ_TEMP_SESSION_KEY_EXPIRE("LRB0002", "biz temp session key expire"),
        /**
         * 账号未注册，前端看到这个状态码，弹出选择框，提示用户账号未注册，是否进入注册页面，用户选择是，进入注册页面
         */
        ACCOUNT_NOT_REGISTER("LRB0003", "账号未注册"),
        /**
         * 未授权
         */
        UNAUTHORIZED("LRB0004", "登录已过期,请重新登录"),
        ;
        private String code;
        private String msg;
    }

    @Getter
    @AllArgsConstructor
    enum Biz {
        /**
         * 业务异常，内容由输入内容决定
         */
        BIZ_FAIL("B00001", ""),
        ;
        private String code;
        private String msg;
    }

    @Getter
    @AllArgsConstructor
    enum Sys {
        /**
         * 系统异常，内容由输入内容决定
         */
        SYS_FAIL("S00001", ""),

        ;
        private String code;
        private String msg;
    }

}
